import scipy.sparse as sp
import numpy as np
from scipy.sparse import csr_matrix
import scipy.sparse as sp
#定义一个数组row，表示稀疏矩阵的非零元素的行索引。
row = np.array([0, 1, 2, 0, 1])
#定义一个数组col，表示稀疏矩阵的非零元素的列索引。
col = np.array([0, 2, 4, 1, 3])

#定义一个数组，表示稀疏矩阵的非零元素的值。
#行索引和列索引的第i个元素是不是就是对应data的第i个元素 例行索引的第二个元素1和列索引的第二个元素2对应数据第二个索引2 即(1,2)  2
data = np.array([1, 2, 3, 4, 5])

# 使用 CSR 格式创建稀疏矩阵
#csr_matrix 是 SciPy 库中的一个类，用于创建压缩稀疏行 (CSR) 格式的稀疏矩阵。这种格式对于存储和处理大型稀疏矩阵非常高效
#使用前面定义的data, row, 和col来创建一个5x5的稀疏矩阵。矩阵中的非零元素的值来源于data，它们的行索引来源于row，列索引来源于col。
sparse_matrix = csr_matrix((data, (row, col)), shape=(5, 5))
print("00",sparse_matrix)
""" 会自动按行号从小到大排序
  (0, 0)	1    在第0行第0列位置的元素是1
  (0, 1)	4    在第0行第1列位置的元素是4
  (1, 2)	2    在第1行第2列位置的元素是2
  (1, 3)	5    在第1行第3列位置的元素是5
  (2, 4)	3    在第2行第4列位置的元素是3
"""
#转换为密集矩阵
print(sparse_matrix.todense())
"""
[[1 4 0 0 0]
 [0 0 2 5 0]
 [0 0 0 0 3]
 [0 0 0 0 0]
 [0 0 0 0 0]]
"""
print("01",sparse_matrix[1].nonzero()[1])
"""
获取稀疏矩阵第一个维度为          nonzero()返回非0元素的维度信息一共两个数组记录第一个和第二个维度   输出第二个维度 
sparse_matrix[1]              sparse_matrix[1].nonzero()                                sparse_matrix[1].nonzero()[1]
(0, 2)	2                     (array([0, 0]), array([2, 3]))                            [2 3]
(0, 3)	5
"""
#sp.dok_matrix方法创建一个空的稀疏矩阵 矩阵的存储方式类似字典
# 创建一个 5x5 的 dok_matrix，所有元素初始值为 0
mat = sp.dok_matrix((5, 5), dtype=float)
# 设置特定位置的元素值
mat[2, 2] = 1.0
mat[3, 4] = 2.0
# 打印矩阵
print("02",mat)
"""
[0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 2.]
 [0. 0. 0. 0. 0.]]
"""